//路由鉴权:鉴权,项目当中路由能不能被访问的权限设置
import router from '@/router';
import nprogress from 'nprogress'
//引入进度条样式
import 'nprogress/nprogress.css';
nprogress.configure({ showSpinner: false })
//引入用户数据(因为是在组件的外部,所以需要引入大仓库Pinia)
import pinia from './store';
import useUserStore from './store/modules/user';
import setting from './setting';
let userStore = useUserStore(pinia);

//配置全局路由守卫(进行路由跳转就会触发)
//全局前置守卫
router.beforeEach(async (to: any, from: any, next: any) => {
    document.title = `${setting.title} ${to.meta.title}`
    //next 路由的放行函数
    nprogress.start();
    let token = userStore.token;
    let username = userStore.username;
    if (token) {
        if (to.path == '/login') {
            next({ path: '/home' })
        } else {
            //登录成功后访问其余6个路由
            //有用户信息
            if (username) {
                //放行
                next();
            } else {
                //如果没有用户信息,则请求到用户信息之后再放行
                try {
                    await userStore.userInfo();
                    next({ ...to });
                } catch (error) {
                    //进入本分支为token过期,
                    //用户手动修改了token,
                    //退出登录使得用户的信息清空
                    await userStore.userLogout();
                    next({ path: "/login", query: { redirect: to.path } })
                }

            }
            next()
        }

    } else {
        if (to.path == '/login') {
            next()
        } else {
            next({ path: '/login', query: { redirect: to.path } })
        }
        next()
    }
})
//全局后置守卫
router.afterEach((to: any, from: any) => {
    nprogress.done();
})

// 1. 跳转路由的进度条设置  --nprogress插件

//  2. 路由鉴权(路由组件的访问权限设置)
//      全部路由组件:登录 | 404 | 首页 | 数据大屏 | 权限管理(三个自路由) | 商品管理(四个子路由)
//

//用户未登录     只能访问login,其余的不可以访问(指向login)
//用户登录成功后  可以访问其余页面,不能访问login(指向首页)
